#include <iostream>
#include <cstdlib>

int main()
{
    // int *a = (int *)malloc(sizeof(int));
    // *a = 10;
    // std::cout<<*a<<std::endl;

    // 申请单个变量
    // int *a = new int(10);
    // std::cout<<*a<<std::endl;
    // 释放内存
    // delete a;
    

    // 申请一个一维数组
    // int *a = (int *)calloc(3,sizeof(int));
    // int *a = new int[3];
    // for(int i = 0; i < 3; i++)
    // {
    //     std::cout<<a[i]<<" ";
    // }
    // std::cout<<std::endl;
    
    // // 释放数组
    // delete []a;

    // 申请一个二维数组 3 * 4
    int** a = new int*[3];//申请一个指针数组，这个数组里面每个元素都是一个指针
    for(int i = 0; i < 3; i++)
    {
        a[i] = new int [4];
    }
    for(int i = 0; i < 3; i++)
    {
        for(int j = 0; j < 4; j++)
        {
            a[i][j] = i * 4 + j + 1;
        }
    }
    for(int i = 0; i < 3; i++)
    {
        for(int j = 0; j < 4; j++)
        {
            std::cout<<a[i][j]<<" ";
        }
        std::cout<<std::endl;
    }
    // 释放空间：先释放里面的数组  最后释放最外层的数组
    for(int i = 0; i < 3; i++)
    {
        delete []a[i];//释放第a[i]个指针指向的数组
    }
    delete []a;
    return 0;
}